package com.dsj.system.service.impl;

import com.dsj.common.domain.Tree;
import com.dsj.common.utils.BuildTree;
import com.dsj.system.mapper.DeptDao;
import com.dsj.system.domain.DeptDO;
import com.dsj.system.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class DeptServiceImpl implements DeptService {

  @Autowired
  private DeptDao sysDeptMapper;

  @Override
  public DeptDO get(Long deptId) {
    return sysDeptMapper.get(deptId);
  }

  @Override
  public List<DeptDO> list(Map<String, Object> map) {
    return sysDeptMapper.list(map);
  }

  @Override
  public int count(Map<String, Object> map) {
    return sysDeptMapper.count(map);
  }

  @Override
  public int save(DeptDO sysDept) {
    return sysDeptMapper.save(sysDept);
  }

  @Override
  public int update(DeptDO sysDept) {
    return sysDeptMapper.update(sysDept);
  }

  @Override
  public int remove(Long deptId) {
    return sysDeptMapper.remove(deptId);
  }

  @Override
  public int batchRemove(Long[] deptIds) {
    return sysDeptMapper.batchRemove(deptIds);
  }

  @Override
  public Tree<DeptDO> getTree() {
    List<Tree<DeptDO>> trees = new ArrayList<Tree<DeptDO>>();
    List<DeptDO> sysDepts = sysDeptMapper.list(new HashMap<String, Object>(16));
    for (DeptDO sysDept : sysDepts) {
      Tree<DeptDO> tree = new Tree<DeptDO>();
      tree.setId(sysDept.getDeptId().toString());
      tree.setParentId(sysDept.getParentId().toString());
      tree.setText(sysDept.getName());
      Map<String, Object> state = new HashMap<>(16);
      state.put("opened", true);
      tree.setState(state);
      trees.add(tree);
    }
    // 默认顶级菜单为０，根据数据库实际情况调整
    Tree<DeptDO> t = BuildTree.build(trees);
    return t;
  }

  @Override
  public boolean checkDeptHasUser(Long deptId) {
    //查询部门以及此部门的下级部门
    int result = sysDeptMapper.getDeptUserNumber(deptId);
    return result == 0;
  }

}
